package com.jijuxie.house.mapper;

import com.jijuxie.house.domain.HouseInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jijuxie.house.domain.UserHouseCollect;
import com.jijuxie.house.domain.dto.CollectCountDTO;
import com.jijuxie.house.domain.vo.HouseCollectVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.time.LocalDateTime;
import java.util.Map;

@Mapper
public interface UserHouseCollectMapper extends BaseMapper<UserHouseCollect> {
    
    /**
     * 查询用户收藏的房源列表（支持排序）
     * 索引：idx_user_status_time (user_id, status, collect_time)
     */
    List<Map<String, Object>> selectCollectListWithTime(
            @Param("userId") Long userId, 
            @Param("orderBy") String orderBy, 
            @Param("orderDirection") String orderDirection,
            @Param("offset") Integer offset,
            @Param("limit") Integer limit);
    
    /**
     * 获取用户收藏总数
     * 索引：idx_user_status (user_id, status)
     */
    Integer countUserCollects(@Param("userId") Long userId);
    
    /**
     * 根据条件统计收藏数量
     * 索引：idx_user_status_time (user_id, status, collect_time)
     */
    Integer countCollectsByCondition(
            @Param("dto") CollectCountDTO dto,
            @Param("needJoinHouse") boolean needJoinHouse);
            
    /**
     * 按时间段统计收藏数量
     * 索引：idx_user_status_time (user_id, status, collect_time)
     */
    List<Map<String, Object>> countCollectsByDateRange(
            @Param("userId") Long userId,
            @Param("startTime") LocalDateTime startTime,
            @Param("endTime") LocalDateTime endTime);

    /**
     * 统计指定时间范围内的收藏数量
     */
    Long countCollectsInDateRange(
            @Param("userId") Long userId,
            @Param("startTime") LocalDateTime startTime,
            @Param("endTime") LocalDateTime endTime);
            
    /**
     * 获取每日收藏数量
     */
    List<Map<String, Object>> selectDailyCollectCounts(
            @Param("userId") Long userId,
            @Param("startTime") LocalDateTime startTime,
            @Param("endTime") LocalDateTime endTime);
} 